7.3 CXL.io, CXL.cachemem Decode and Forwarding
这部分内容描述了 CXL 交换机如何处理和路由三种不同的 CXL 流量:CXL.io、CXL.cache 和 CXL.mem。
- CXL.io 流量处理 (7.3.1)
CXL.io 协议基本遵循 PCIe 的标准,用于配置、I/O 访问等。
- 基本规则: 在一个虚拟 CXL 交换机 (VCS) 内部,CXL.io 流量的请求、完成、地址解码和转发规则必须遵守 PCIe 基本规范的定义。
- 路由限制:
- 所有 CXL.io 的 TLP (事务层包) 必须在同一个 VCS 内部进行路由。
- 交换机内部的对等网络 (P2P) 通信被限制在单个 VCS 内的 PPB 之间。
- RCD 支持:
- 当 RCD (通常指 CXL 内存扩展设备) 连接在交换机下时,它们必须以 RCiEP (Root Complex Integrated Endpoints) 设备的形式呈现给软件。
- 为了支持对 RCD 的访问,交换机端口的 CXL 扩展 DVSEC 中定义了备用的 MMIO 和总线范围解码窗口,用于将请求正确转发到 RCD。
- CXL.cache 流量处理 (7.3.2)
CXL.cache 协议用于主机和加速器 (Type 1/Type 2 设备) 之间的缓存一致性。
- 基本情况: 如果交换机不支持允许多个缓存设备扩展的 CXL.cache 协议增强功能,那么在一个 VCS 中,只允许一个下行端口被启用以支持 Type 1 或 Type 2 设备。在这种简单情况下,请求和响应只是在唯一的上行端口 (USP) 和这个指定的下行端口 (DSP) 之间直接路由,因此不需要额外的解码寄存器。
- 增强情况: 如果交换机支持多设备扩展的 CXL.cache 协议增强功能,那么 VCS 中的多个下行端口可以同时配置为支持 Type 1 或 Type 2 设备。
- 限制: 由 Fabric Manager (FM) 拥有的 PPB 不支持 CXL.cache 流量。
- CXL.mem 流量处理 (7.3.3)
CXL.mem 协议用于主机访问 Type 3 内存设备。
- 解码机制: CXL.mem 流量的路由是由 HDM 解码器 (HDM Decode) DVSEC 能力中的寄存器来控制的,这些寄存器定义了内存地址的解码范围。
- 请求路由 (Host -> Device):
- 所有来自主机/根端口 (RP) 的 CXL.mem 请求都流向下行方向。
- VCS 中的地址解码寄存器会根据请求的地址,决定将其路由到哪个下行 PPB。
- 响应路由 (Device -> Host):
- 所有来自下行端口的 CXL.mem 响应都流向上行方向,并且只会路由到该 VCS 唯一的一个上行端口。
- FM 拥有的 PPB 对 CXL 的处理 (7.3.4)
- 当 SLD 组件或 MLD 中的 LD 处于未绑定状态时,它们由 FM 拥有。
- FM 可以通过其 API,使用 CXL.io 事务来访问这些未绑定的设备或逻辑设备。
- 在这种情况下,交换机扮演着一个虚拟根联合体 (virtual Root Complex) 的角色,来处理和转发 FM 发起的 CXL.io 流量。